The present invention relates to the field of computer software programming, methods for specifying software programs before they are written in a programming language, and methods for implementing software specified according to the method. The method also relates to the field of automatic conversion of software from specification to programming languages. In addition, the present invention relates to the field of software evolution, and more specifically, the field of reuse of portions or fragments of software code which provide some coherent functionalities. The methods are beneficial in both design and implementation of computer software.
Despite much research and many promising products, the software industry is still struggling to find ways to improve software quality while reducing the costs of software production. The software industry also faces many difficulties in coping with the maintenance and evolution of software systems. It is well recognized that reusability is key to further improving software productivity and quality. However, for the development of new software systems, substantial redesign and redevelopment of parts of existing software that deliver some coherent functionalities that have been developed earlier is required. These parts will be referred to as functional factors. A functional factor is implemented by a set of code fragments in a program. Functional factors range from small to large in size. However, these functional factors cannot be separately and precisely represented in existing techniques, development environments and languages. As such, in the present state of the art, these functional factors cannot be developed separately and cannot be reused by later developed systems that would benefit from them because they interface with and/or are intertwined with other functional factors. The lack of a representation or an architecture that provides for the separate definition and composition of functional factors to form a software system prevents the reuse of functional factors.
The majority of software maintenance activity involves incorporating new functional factors, modifying existing functional factors and removing out-dated or no longer needed functional factors. The present state of the art does not support a direct mapping between a functional factor and that portion of a software system that implements the functional factor. Most functional factors are implemented in fragments of software code buried in a system and intertwined with other functional factors. As a result, typical maintenance and evolution activity results in time-consuming, high-impact, invasive modification to a system.
In summary, a problem in software development today is the inability to assemble software systems from functional factors in a manner similar to the process of assembling a hardware system from defined parts. This problem exists because functional factors cannot be represented separately without including other interfacing functional factors. This prevents reusing functional factors by assembling them to form a program. The Data Flow Net provides a solution to this problem.
Although software engineering has made much advancement in recent years, a large amount of commonly encountered fragments of software which provide some coherent functionalities cannot be effectively specified and easily developed for reuse. Portions of software can be analogized to parts called functional factors. Because these functional factors are tightly embedded in the program in which they are included, they cannot be reused in other programs that could benefit from them. The Data Flow Net (DF Net) is a novel software representation which provides a method for effective assembling of software systems from software parts known as functional factors. The functional factors are both easily reusable and provide for enhanced maintainability of the software system.